// 格式化时间
// export function dateFormat(dateString, fmt) {
//   const date = new Date(dateString)
//   let ret;
//   const opt = {
//     'Y+': date.getFullYear().toString(), // 年
//     'm+': (date.getMonth() + 1).toString(), // 月
//     'd+': date.getDate().toString(), // 日
//     'H+': date.getHours().toString(), // 时
//     'M+': date.getMinutes().toString(), // 分
//     'S+': date.getSeconds().toString() // 秒
//     // 有其他格式化字符需求可以继续添加，必须转化成字符串
//   };
//   for (let k in opt) {
//     ret = new RegExp('(' + k + ')').exec(fmt);
//     if (ret) {
//       fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
//     };
//   };
//   return fmt;
// }

/**
 * 格式化日期：yyyy-MM-dd HH:mm:ss
 * @Author: zml
 * @param {*} date 
 */
export function formatDateTime(dateTime, num = 0) {
  // num 哪年的当前日期
  let n = new Date();
  let date = num ? new Date(n.getFullYear() + num, n.getMonth(), n.getDate(), n.getHours(), n.getMinutes(), n.getSeconds(), n.getMilliseconds()) : dateTime
  let year = date.getFullYear()
  let month = date.getMonth() + 1
  let weekday = date.getDate()
  let hours = date.getHours() // 时
  let minutes = date.getMinutes()  // 分
  let seconds = date.getSeconds() // 秒
  let h = hours < 10 ? '0' + hours : hours;
  let m = minutes < 10 ? '0' + minutes : minutes;
  let s = seconds < 10 ? '0' + seconds : seconds;
  if (month < 10) {
    month = '0' + month
  }
  if (weekday < 10) {
    weekday = '0' + weekday
  }
  return year + '-' + month + '-' + weekday + ' ' + h + ':' + m + ':' + s
}

/**
 * 获取某月的天数
 * @Author: zml
 * @param {*} dateString ==> new Date() 格式
 */
export function getMonthDays(dateString) {
  let month = dateString.getMonth() //当前月
  let year = dateString.getYear() //当前年
  year += year < 2000 ? 1900 : 0 //
  let monthStartDate = new Date(year, month, 1)
  let monthEndDate = new Date(year, month + 1, 1)
  let days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24)
  return days
}

/**
 * 获取月的开始日期
 * @Author: zml
 * @param {*} dateString ==> new Date() 格式
 */
export function getMonthStartDate(dateString) {
  let month = dateString.getMonth() //当前月
  let year = dateString.getYear() //当前年
  year += year < 2000 ? 1900 : 0
  // 可以这样使用
  // startTime: this.moment(new Date(this.querParamsDetail.year, this.querParamsDetail.month - 1, 1)).format('YYYY-MM-DD') + ' 00:00:00',
  let monthStartDate = new Date(year, month, 1)
  return formatDate(monthStartDate)
}

/**
 * 获取月的结束日期
 * @Author: zml
 * @param {*} dateString ==> new Date() 格式
 */
export function getMonthEndDate(dateString) {
  let month = dateString.getMonth() //当前月
  let year = dateString.getYear() //当前年
  year += year < 2000 ? 1900 : 0 //
  let days = getMonthDays(dateString) //获取当月总共有多少天
  let monthEndDate = new Date(year, month, days)
  return formatDate(monthEndDate) //返回当月结束时间 
}

/**
 * 获取年的开始日期
 * @Author: zml
 * @param {dateString} dateString ==> new Date() 格式
 */
export function getYearStartDate(dateString) {
  let yearStartDate = ''
  yearStartDate = dateString.getFullYear() //获得当前年份4位年
  yearStartDate = new Date(yearStartDate, 0, 1)
  return formatDate(yearStartDate)
}

/**
 * 获取年的结束日期
 * @Author: zml
 * @param {dateString} dateString ==> new Date() 格式
 */
export function getYearEndDate(dateString) {
  let yearEndDate = ''
  yearEndDate = dateString.getFullYear() //获得当前年份4位年
  yearEndDate = new Date(yearEndDate, 11, 31)
  return formatDate(yearEndDate)
}

// 以当前获取未来多少天数
export function getDateAfterDays(days) {
  //days 正数的时候就是向前，负数的时候就是向后
  // 获取当前日期
  const currentDate = new Date();
  // 设置天数（注意：当前日期的天数不会被重置，除非超过月份的天数）
  currentDate.setDate(currentDate.getDate() + days);
  // 格式化日期为YYYY-MM-DD格式
  const year = currentDate.getFullYear();
  const month = String(currentDate.getMonth() + 1).padStart(2, '0'); // 月份从0开始，所以需要+1
  const day = String(currentDate.getDate()).padStart(2, '0');
  // 拼接成最终日期字符串
  const formattedDate = `${year}-${month}-${day}`;
  return formattedDate;
}

// 时间戳转换
export function transitionTimestamp(dateString, type = 'Y_M_R', format = false) {
  // type 为Y_M_R表示时间戳转换为年月日，为R_Y代表年月日转换为时间戳
  //  format 代表是否需要时分秒
  if (type == 'Y_M_R') {
    //将时间戳格式转换成年月日时分秒
    var date = new Date(dateString); //以毫秒计算
    var Y = date.getFullYear() + '-';
    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
    return format ? Y + M + D + h + m + s : Y + M + D
  }
  if (type == 'R_Y') {
    return new Date(dateString).getTime()
  }
}

/**  
* 计算两个日期之间的天数  
* @param {string} Date_end 结束日期  
* @param {string} Date_start 开始日期  
* @return {number} iDays间隔的天数  
*/
export function DateDiff(Date_start, Date_end) {
  let aDate, oDate1, oDate2, iDays;
  Date_end = Date_end.split(" "); //将时间以空格划分为两个数组  第一个数组是 2019-05-20 第二个数组是 00：00：00
  aDate = Date_end[0].split("-"); //获取第一个数组的值
  oDate1 = new Date(aDate[0], aDate[1], aDate[2]); //将前半个数组以-拆分，每一个是一个数值
  Date_start = Date_start.split(" ");
  aDate = Date_start[0].split("-");
  oDate2 = new Date(aDate[0], aDate[1], aDate[2]);
  iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24); //把相差的毫秒数转换为天数
  return iDays;
}

// 获取本周的的开始日期
export function getThisMonday() {
  const now = new Date();
  const day = now.getDay(); // 0 (Sun) ~ 6 (Sat)
  const diffToMonday = day === 0 ? -6 : 1 - day; // 计算偏移量
  now.setDate(now.getDate() + diffToMonday);
  now.setHours(0, 0, 0, 0); // 可选：设置为 00:00:00
  return formatDate(now);
}

// 获取本周的结束日期
export function getThisSunday() {
  const now = new Date();
  const day = now.getDay(); // 0 (周日) ~ 6 (周六)
  const diffToSunday = day === 0 ? 0 : 7 - day; // 如果是周日，差值为 0；否则 7 - day
  now.setDate(now.getDate() + diffToSunday); // 调整到本周日
  now.setHours(23, 59, 59, 999); // 设置为当天 23:59:59.999
  return formatDate(now);
}

/**
 * 可以再写一个方法，不要修改这个方法
 * 格式化日期：yyyy-MM-dd 
 * @Author: zml
 * @param {*} date 
 */
export function formatDate(date, isSmall = true) {
  let year = date.getFullYear()
  let month = date.getMonth() + 1
  let weekday = date.getDate()

  if (month < 10) {
    month = '0' + month
  }
  if (weekday < 10) {
    weekday = '0' + weekday
  }
  if (isSmall) {
    return year + '-' + month + '-' + weekday
  } else {
    return year + month + weekday
  }
}




